<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>改变函数内this指向call方法</title>
</head>
<body>
  <script>
    // 改变函数内this指向  js提供了三种方法  call()  apply()  bind()

    // 1. call()
    var o = {
      name: 'andy',
    }

    function fn (a, b) {
      console.log(this)
      console.log(a + b)

    }

    fn.call(o, 1, 2)
    // call 第一个可以调用函数 第二个可以改变函数内的this 指向
    // call 的主要作用可以实现继承
    function Father (uname, age, sex) {
      this.uname = uname
      this.age = age
      this.sex = sex
    }

    function Son (uname, age, sex) {
      Father.call(this, uname, age, sex)
    }

    var son = new Son('刘德华', 18, '男')
    console.log(son)

    //  描述
    //  call() 允许为不同的对象分配和调用属于一个对象的函数/方法。
    // call() 提供新的 this 值给当前调用的函数/方法。你可以使用 call 来实现继承：写一个方法，然后让另外一个新的对象来继承它（而不是在新对象中再写一次这个方法）。
  </script>
</body>
</html>